﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using vudu.Presentacion.Contrato.VU_07_Gestionar_Esquema_de_Evaluacion_por_Profesor;
using vudu.ClasesDominio;
using vudu.Logica.Fachada;
using System.Data;

namespace vudu.Presentacion.Presentador.VU_07_Gestionar_Esquema_de_Evaluacion_por_Profesor
{
        
    public class PresentadorNuevoEsquemaEvaluacion
    {
        private  IContratoNuevoEsquemaEvaluacion _vista;
        private EnlaceLogico _fachada;
        
        String _nombre, _tipo;
        int _porcentaje;
        DateTime _fecha;

        //Constructor de Nuevo Esquema Evaluacion
        public PresentadorNuevoEsquemaEvaluacion(IContratoNuevoEsquemaEvaluacion vista, EnlaceLogico fachada)
        {
            _vista = vista;
            _fachada = fachada;
        }

        //Metodo que inicia la pantalla
        public void IniciarPantalla()
        {
            _vista.Error.Text = "";
            _vista.Mensaje3.Text = "";
            _vista.Error.Visible = false;
            _vista.Mensaje3.Visible = false;
           
            
            _vista.Primero.Visible = true;
            _vista.Segundo.Visible = false;

                       
         }

        //Metodo que inicia el panel secundario con el formulario
        public void IniciarPantallaSecuandaria(String Materia)
        {
            _vista.Error.Text = "";
            _vista.Error.Visible = false;
           
            
            _vista.Primero.Visible = true;
            _vista.Segundo.Visible = true;

            _vista.MateriaEsquema.Text = Materia;
            _vista.MateriaEsquema.Visible = true;

            _vista.Evaluacion.Visible = false;
        }

        //Metodo que reinicia la pantalla segun sea la opcion
        public void Reiniciar(int Opcion)
        {
            if (Opcion == 1)
            {
                _vista.Error.Text = "";
                _vista.Error.Visible = false;


                _vista.Primero.Visible = true;
                _vista.Segundo.Visible = false;

                _vista.Mensaje3.Text = "El esquema de evaluación se agregó con exito";
                _vista.Mensaje3.Visible = true;

                _vista.Materia.Items.Clear();
            }
            else
            {
                IniciarPantalla();
            }
        }

        //Valida que la seleccion de una materia en el dropdown list sea valida
        public bool ValidarMateria()
        {
            if (_vista.Materia.SelectedValue != "0")
                return true;
            else
                return false;
        }

        //Asigna el valor a _nombre
        public void setNombre()
        {
            this._nombre = _vista.Nombre.Text;
        }

        //Asigna el valor a _tipo
        public void setTipo()
        {
            this._tipo = _vista.Tipo.SelectedValue;
        }

        //Asigna el valor a _porcentaje
        public void setPorcentaje()
        {
            this._porcentaje = Convert.ToInt32(_vista.Porcentaje.Text);
        }

        ////Asigna el valor a _fecha
        public void setFecha()
        {
            this._fecha = Convert.ToDateTime(_vista.Fecha.Text);
        }

        //Valida los datos introducidos en el formulario
        public bool ValidarDatos()
        {
            if ((ValidarCampoNombreEvaluacion()) && (ValidarCampoPorcentajeEvaluacion()) && (ValidarCampoFecha()))
            {
                setNombre();
                setTipo();
                setPorcentaje();
                setFecha();
                return true;
                
            }
            else
            {
                return false;
            }
        }

        //Llena el dropdown list con las materias del profesor que faltan por asignar esquema de evaluacion
         public void LlenarListaMaterias(Profesor profesor)
         {

             _vista.Materia.Items.Add(new ListItem("--Seleccione Materia--", "0"));


             List<SeccionMateria> materias = _fachada.ConsultarSeccionesProfesor(profesor);

             for (int i = 0; i < materias.Count; i++) 
             {
               
               _vista.Materia.Items.Add(new ListItem (materias[i].Materia.Nombre.ToString() +" Seccion: " + materias[i].Codigo.ToString(), materias[i].IdSeccionMateria.ToString()));
                
             }

             _vista.Informacion.Text = "Profesor(a): " + profesor.Nombre + " " + profesor.Apellido;

         }

        //Vacia la tabla esquema de evaluacion cuando se selecciona una nueva seccion o se presiona
        //el boton cancelar
         public void VaciarTabla()
         {
             _vista.Evaluacion.Visible = false;
         }
 
        //Agrega las evaluaciones a la BD
        public bool AgregarEsquemaEvaluacion(List<Evaluacion> _evaluaciones)
         {
             try
             {
                 foreach (Evaluacion evaluacionLista in _evaluaciones)
                 {
                     _fachada.InsertarEvaluacion(evaluacionLista);
                 }
                 _vista.Error.Text = "Operacion Exitosa: El esquema de evaluacion se agrego con exito";
                 _vista.Error.ForeColor = System.Drawing.Color.Green;
                 _vista.Error.Visible = true;
                 return true;
             }
             catch (Exception)
             {
                 _vista.Error.Text = "Operacion Fallida: No se pudo agregar el esquema de evaluacion";
                 _vista.Error.ForeColor = System.Drawing.Color.Red;
                 _vista.Error.Visible = true;
                 return false;
             }
        
        
         }

        //Agrega una nueva evaluacion a la tabla
        public bool AgregarEvaluacion()
        {
            if (ValidarDatos())
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        //Valida los datos que se introducen en el campo porcentaje
        public bool ValidarCampoPorcentajeEvaluacion()
        {
            if (_vista.Porcentaje.Text.Length == 0)
            {
                _vista.Error.Text = "Operacion Fallida: El campo Porcentaje es obligatorio";
                _vista.Error.ForeColor = System.Drawing.Color.Red;
                _vista.Error.Visible = true;
                _vista.PorcentajeEval.ForeColor = System.Drawing.Color.Red;
                return false;
                              
            }
            else if (!ValidarSiEsNumero(_vista.Porcentaje.Text))
            {
                _vista.Error.Text = "Operacion Fallida: El campo Porcentaje no puede tener letras";
                _vista.Error.ForeColor = System.Drawing.Color.Red;
                _vista.Error.Visible = true;
                _vista.PorcentajeEval.ForeColor = System.Drawing.Color.Red;
                return false;
            }
            else if (!ValidarMenorQueCien(_vista.Porcentaje.Text))
            {
                _vista.Error.Text = "Operacion Fallida: El porcentaje de una evaluación no puede ser mayor a 100%";
                _vista.Error.ForeColor = System.Drawing.Color.Red;
                _vista.Error.Visible = true;
                _vista.PorcentajeEval.ForeColor = System.Drawing.Color.Red;
                return false;
            }
            else
            {
                _vista.PorcentajeEval.ForeColor = System.Drawing.Color.Black;
                _vista.Error.Visible = false;
                return true;
            }
        }

        //Valida que el porcentaje de la evaluacion no sea mayor a 100%
        public bool ValidarMenorQueCien(string numero)
        {
            if (Convert.ToInt32(numero) <= 100)
                return true;
            else
                return false;
        }

        //Vacia el formulario
        public void VaciarFormulario()
        {
            _vista.Nombre.Text = _vista.Porcentaje.Text = _vista.Fecha.Text = "";
        }

        //Valida los datos que se introducen en el campo porcentaje son numeros
        public bool ValidarSiEsNumero(string numero)
        {
            try
            {
                Convert.ToInt32(numero);
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }

        //Valida los datos que se introducen en el campo nombre 
        public bool ValidarCampoNombreEvaluacion()
        {
            if (_vista.Nombre.Text.Length == 0)
            {
                _vista.Error.Text = "Operacion Fallida: El campo Nombre es obligatorio";
                _vista.Error.ForeColor = System.Drawing.Color.Red;
                _vista.Error.Visible = true;
                _vista.NombreEval.ForeColor = System.Drawing.Color.Red;
                return false;
            }
            else
            {
                _vista.NombreEval.ForeColor = System.Drawing.Color.Black;
                _vista.Error.Visible = false;
                return true;
            }
        }

        //Valida los datos que se introducen en el campo fecha
        public bool ValidarCampoFecha()
        {
            if (_vista.Fecha.Text.Length == 0)
            {
                _vista.Error.Text = "Operacion Fallida: El campo Fecha es obligatorio";
                _vista.Error.ForeColor = System.Drawing.Color.Red;
                _vista.Error.Visible = true;
                _vista.FechaEval.ForeColor = System.Drawing.Color.Red;
                return false;
            }
            else if (!ValidarSiEsFecha(_vista.Fecha.Text))
            {
                _vista.Error.Text = "Operacion Fallida: La Fecha introducida tiene un formato invalido";
                _vista.Error.ForeColor = System.Drawing.Color.Red;
                _vista.Error.Visible = true;
                _vista.FechaEval.ForeColor = System.Drawing.Color.Red;
                return false;
            }
            else if (!ValidarSiEsFechaActual(_vista.Fecha.Text))
            {
                _vista.Error.Text = "Operacion Fallida: La Fecha no puede ser anterior a la fecha actual";
                _vista.Error.ForeColor = System.Drawing.Color.Red;
                _vista.Error.Visible = true;
                _vista.FechaEval.ForeColor = System.Drawing.Color.Red;
                return false;
            }
            else
            {
                _vista.FechaEval.ForeColor = System.Drawing.Color.Black;
                _vista.Error.Visible = false;
                return true;
            }
        }

        //Valida que los nombres de las evaluaciones no este repetido
        public bool VerificarNombres(Evaluacion miEval, List<Evaluacion> misEvaluaciones)
        {
            string nombre = miEval.Nombre;
            nombre = nombre.ToUpper();
            bool resultado = true;

            foreach (Evaluacion _eval in misEvaluaciones)
            {
                if (nombre == _eval.Nombre.ToUpper())
                {
                    _vista.Error.Text = "Operacion Fallida: No puede insertar dos evaluaciones con el mismo nombre";
                    _vista.Error.ForeColor = System.Drawing.Color.Red;
                    _vista.Error.Visible = true;
                    _vista.NombreEval.ForeColor = System.Drawing.Color.Red;
                    resultado = false;
                }

            }

            if (resultado == true)
            {
                _vista.Error.Visible = false;
                _vista.NombreEval.ForeColor = System.Drawing.Color.Black;
            }

            return resultado;
        }

        //Valida que la suma de todas las evaluaciones del esquema no supere el 100%
        public bool VerificarPorcentajes(Evaluacion miEval, List<Evaluacion> misEvaluaciones)
        {
            int total = 0;
            bool resultado = true;

            foreach (Evaluacion _eval in misEvaluaciones)
            {
                total = total + _eval.Porcentaje;
            }

            total = total + miEval.Porcentaje;

            if (total > 100)
            {
                _vista.Error.Text = "Operacion Fallida: Los porcentajes de las evaluaciones no pueden superar el 100%";
                    _vista.Error.ForeColor = System.Drawing.Color.Red;
                    _vista.Error.Visible = true;
                    _vista.PorcentajeEval.ForeColor = System.Drawing.Color.Red;
                    resultado = false;
                
            }

            if (resultado == true)
            {
                _vista.Error.Visible = false;
                _vista.PorcentajeEval.ForeColor = System.Drawing.Color.Black;
            }

            return resultado;
        }

        

        //Valida los datos que se introducen en el campo fecha se introduzca solo fechas con formato valido
        public bool ValidarSiEsFecha(string fecha)
        {
            try
            {
                Convert.ToDateTime(fecha);
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }

        //Valida que la fecha introducida sea mayor o igual a la fecha actual del sistema
        public bool ValidarSiEsFechaActual(string fecha)
        {
            if (Convert.ToDateTime(fecha) >= System.DateTime.Now)
                return true;
            else
                return false;

        }

        //Carga la informacion de la tabla Esquema Evaluacion
        public void cargarTabla(List<Evaluacion> _evaluaciones)
        {
            DataTable table = new DataTable();
            table.Columns.Add("Nombre",typeof(String));
            table.Columns.Add("Tipo", typeof(String));
            table.Columns.Add("Porcentaje", typeof(Int32));
            table.Columns.Add("Fecha", typeof(DateTime));
            foreach (Evaluacion _eval in _evaluaciones)
            {
                table.Rows.Add(_eval.Nombre,_eval.TipoEvaluacion,_eval.Porcentaje, _eval.FechaEvaluacion);
            }
            _vista.Evaluacion.Visible = true;
            _vista.Evaluacion.DataSource = table;
            _vista.Evaluacion.DataBind();
            _vista.Error.Text = "Operacion Exitosa: La evaluacion se agrego con exito";
            _vista.Error.ForeColor = System.Drawing.Color.Green;
            _vista.Error.Visible = true;
        }

        

        
       

      

        

       


        


    }
}